#ifndef MQTTWIDGET_H
#define MQTTWIDGET_H

#include <QWidget>
#include <QLineEdit>
#include <QPushButton>
#include <QTextEdit>
#include <QLabel>
#include <QSpinBox>
#include <QRadioButton>
#include <QButtonGroup>
#include <QGroupBox>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QGridLayout>

// 引入业务层和数据层
#include "business/mqtt/mqttmanager.h"
#include "models/mqttconfig.h"

/**
 * @brief MQTT测试界面类（UI层）- 基于巴法云TCP协议
 * 
 * 职责：
 * 1. 负责界面布局和显示
 * 2. 响应用户操作
 * 3. 将用户操作转发给业务层（MqttManager）
 * 4. 接收业务层信号，更新界面显示
 * 
 * 特点：
 * - 不包含任何业务逻辑
 * - 通过MqttManager处理所有MQTT操作
 * - 界面与逻辑完全分离
 * 
 * 功能：
 * - 连接管理（服务器、端口、UID配置）
 * - 设备控制（风扇模式、档位控制）
 * - 温度监控（温度数据发布）
 * - 消息收发（自定义主题和消息）
 * - 状态显示（连接状态、统计信息）
 */
class MqttWidget : public QWidget
{
    Q_OBJECT

public:
    explicit MqttWidget(QWidget *parent = nullptr);
    ~MqttWidget();
    
    /**
     * @brief 清理资源（返回主页时调用）
     * 断开MQTT连接，避免后台继续占用资源
     */
    void cleanup();

private:
    void setupUI();
    void connectSignals();
    void updateUIState(bool connected);
    MqttConfig getConfigFromUI() const;
    void loadDefaultConfig();

private slots:
    // UI控件响应
    void onConnect();
    void onDisconnect();
    void onSendMessage();
    void onClearReceive();
    void onClearSend();
    void onClearStatistics();
    
    // 设备控制响应
    void onModeChanged(bool checked);
    void onFanSpeedButtonClicked();
    void onPublishTemperature();
    
    // 业务层信号响应
    void onConnected();
    void onDisconnected();
    void onError(const QString &error);
    void onMessageReceived(const QString &topic, const QString &msg);
    void onRawDataReceived(const QString &data);
    void onConnectionStatusChanged(const QString &status);
    void onStatisticsUpdated(quint64 sent, quint64 received);
    
    // 设备状态信号响应
    void onFanModeChanged(bool manual);
    void onFanSpeedChanged(int speed);
    void onTemperatureReceived(double temp);

private:
    // 业务层对象
    MqttManager *m_mqttManager;
    
    // 连接配置控件
    QGroupBox *m_connectionGroup;
    QLineEdit *m_serverEdit;
    QSpinBox *m_portSpinBox;
    QLineEdit *m_uidEdit;
    QPushButton *m_connectButton;
    QPushButton *m_disconnectButton;
    QLabel *m_statusLabel;
    QLabel *m_errorLabel;
    
    // 主题配置控件
    QGroupBox *m_topicGroup;
    QLineEdit *m_fanTopicEdit;
    QLineEdit *m_tempTopicEdit;
    QPushButton *m_saveConfigButton;
    
    // 设备控制控件
    QGroupBox *m_controlGroup;
    QRadioButton *m_autoModeRadio;
    QRadioButton *m_manualModeRadio;
    QButtonGroup *m_modeButtonGroup;
    QPushButton *m_fanSpeed0Button;
    QPushButton *m_fanSpeed1Button;
    QPushButton *m_fanSpeed2Button;
    QPushButton *m_fanSpeed3Button;
    QLabel *m_currentSpeedLabel;
    
    // 温度控制控件
    QGroupBox *m_temperatureGroup;
    QSpinBox *m_temperatureSpinBox;
    QPushButton *m_publishTempButton;
    QLabel *m_receivedTempLabel;
    
    // 消息收发控件
    QGroupBox *m_messageGroup;
    QTextEdit *m_receiveTextEdit;
    QPushButton *m_clearReceiveButton;
    QLineEdit *m_topicEdit;
    QLineEdit *m_messageEdit;
    QPushButton *m_sendButton;
    QPushButton *m_clearSendButton;
    
    // 统计信息控件
    QGroupBox *m_statisticsGroup;
    QLabel *m_sentCountLabel;
    QLabel *m_receivedCountLabel;
    QPushButton *m_clearStatsButton;
    
    // 状态跟踪
    bool m_isConnected;
    int m_currentFanSpeed;
};

#endif // MQTTWIDGET_H

